import { createRouter, createWebHistory } from 'vue-router';
import { Routes } from './routes';
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { userInfoStore } from '@/store/userInfo'
import pinia from '@/store';
const userUserInfoStore = userInfoStore(pinia)
const router = createRouter({
  history: createWebHistory(),
  routes: Routes,
  scrollBehavior() {
    return { top: 0, left: 0 }
  },
})
// 路由前置守卫,路由加载前
const whiteRouterLists = [
  "/search",
  '/',
  "/home",
  "/category",
  "/shop",
  "/login",
];

router.beforeEach(async (to, from, next) => {
  // 进度条开始加载

  // 判断token
  const token = localStorage.getItem('token')
  // const token = userUserInfoStore.token
  // console.log(token, 'token值');
  if (token) {
    // console.log('有token');
    if (to.path === '/login') {
      next('/')
      NProgress.done()
    } else {// 请求的不是登录路由
      // next()
      // 判断有没有登录
      const username = userUserInfoStore.name
      if (username) {
        next()
      } else {// 没有登陆
        // console.log(username, '没有登录');
        try {
          // 异步请求获取用户信息(包含权限数据) ==> 动态注册用户的权限路由 => 当次跳转不可见
          await userUserInfoStore.getUserInfoData()
          next(to) // 重新跳转去目标路由, 能看到动态添加的异步路由, 且不会丢失参数
          NProgress.done() // 结束进度条

        } catch (error: any) { // 如果请求处理过程中出错
          // 重置用户信息
          await userUserInfoStore.reset()
          // 跳转到登陆页面, 并携带原本要跳转的路由路径, 用于登陆成功后跳转
          next(`/login?redirect=${to.path}`)
          // 完成进度条
          NProgress.done()
        }
      }
    }

  }
  else {
    // console.log('没有token');
    if (whiteRouterLists.indexOf(to.path) !== -1) {
      //再白名单中就放行
      next();
    } else {
      // 跳转到login去登录
      next(`/login?redirect=${to.path}`);
      NProgress.done()
    }
  }
});
// 路由加载完成
router.afterEach(() => {
  NProgress.done();
})

// 导出路由
export default router;
